package fr.esisar.cs420.swt;

import java.sql.SQLException;
import java.util.List;
import java.util.StringTokenizer;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;

import fr.esisar.cs420.traitement.Application;
import fr.esisar.cs420.traitement.Client;
import fr.esisar.cs420.traitement.GestionAdmin;
import org.eclipse.swt.widgets.Label;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Canvas;

public class Statistique extends Shell {
	private Text nbCommandes;
	private Text prixMoyen;
	private Text nom;
	private Text prenom;
	private Text adresse;
	private Text ville;
	Client meilleurClient = new Client();
	private Text nbClients;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String args[]) {

	}

	/**
	 * Create the shell.
	 * @param display
	 */
	public Statistique(Display display) {
		super(display, SWT.SHELL_TRIM);
		
		Group grpSds = new Group(this, SWT.NONE);
		grpSds.setText("Nombre de commandes");
		grpSds.setBounds(10, 25, 235, 82);
		
		nbCommandes = new Text(grpSds, SWT.NONE);
		nbCommandes.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.BOLD));
		nbCommandes.setEditable(false);
		nbCommandes.setBounds(63, 36, 76, 21);
		
		String nombreCommandes = "";
		try {
			nombreCommandes = GestionAdmin.getNbCommande();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		nbCommandes.setText(nombreCommandes);
		Group grpPrixMoyenDes = new Group(this, SWT.NONE);
		grpPrixMoyenDes.setText("Prix moyen des commandes");
		grpPrixMoyenDes.setBounds(538, 25, 247, 82);
		
		prixMoyen = new Text(grpPrixMoyenDes, SWT.CENTER);
		prixMoyen.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.BOLD));
		prixMoyen.setForeground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_FOREGROUND));
		prixMoyen.setEditable(false);
		prixMoyen.setBounds(46, 34, 154, 21);
		
		String prixMoyenCommandes="";
		try {
			prixMoyenCommandes = GestionAdmin.getPrixMoyenCommandes();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		prixMoyen.setText(prixMoyenCommandes+" €");
		
		Group grpLeMeilleurClient = new Group(this, SWT.NONE);
		grpLeMeilleurClient.setText("Le meilleur client");
		grpLeMeilleurClient.setBounds(10, 140, 319, 292);
		
		nom = new Text(grpLeMeilleurClient, SWT.BORDER);
		nom.setEditable(false);
		nom.setBounds(108, 48, 154, 21);
		
		
		try {
			meilleurClient = GestionAdmin.getMeilleurClient();
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		Label lblNewLabel = new Label(grpLeMeilleurClient, SWT.NONE);
		lblNewLabel.setBounds(37, 51, 55, 15);
		lblNewLabel.setText("Nom");
		
		Label lblPrenom = new Label(grpLeMeilleurClient, SWT.NONE);
		lblPrenom.setText("Prenom");
		lblPrenom.setBounds(37, 87, 55, 15);

		
		Label lblAdresse = new Label(grpLeMeilleurClient, SWT.NONE);
		lblAdresse.setText("Adresse");
		lblAdresse.setBounds(37, 122, 55, 15);
		

		Label lblVille = new Label(grpLeMeilleurClient, SWT.NONE);
		lblVille.setText("Ville");
		lblVille.setBounds(37, 154, 55, 15);
		
		prenom = new Text(grpLeMeilleurClient, SWT.BORDER);
		prenom.setEditable(false);
		prenom.setBounds(108, 84, 154, 21);
		
		adresse = new Text(grpLeMeilleurClient, SWT.BORDER);
		adresse.setEditable(false);
		adresse.setBounds(108, 116, 154, 21);
		
		ville = new Text(grpLeMeilleurClient, SWT.BORDER);
		ville.setEditable(false);
		ville.setBounds(108, 148, 154, 21);

		prenom.setText(meilleurClient.getPrenom());
		adresse.setText(meilleurClient.getAdresse());
		ville.setText(meilleurClient.getVille());
		nom.setText(meilleurClient.getNom());
		
				
		Button btnNewButton = new Button(grpLeMeilleurClient, SWT.NONE);
		
		if( meilleurClient.getNom().equals("")){
			
		}
		else{
			btnNewButton.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseDown(MouseEvent e) {
					
					Application.client = meilleurClient;
					try {
						Display display = Display.getDefault();
						AfficherCommandes shell = new AfficherCommandes(display);
						shell.open();
						shell.layout();
						while (!shell.isDisposed()) {
							if (!display.readAndDispatch()) {
								display.sleep();
							}
						}
					} catch (Exception e1) {
						e1.printStackTrace();
					}
				}
			});
		}
		
		btnNewButton.setBounds(81, 235, 181, 25);
		btnNewButton.setText("Liste des commandes du client");
		
		final Canvas canvas = new Canvas(this, SWT.NONE);
		canvas.setFont(SWTResourceManager.getFont("Segoe UI", 7, SWT.BOLD));
		canvas.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
		canvas.setBounds(399, 140, 359, 292);
		
		Group grpNombreDeClients = new Group(this, SWT.NONE);
		grpNombreDeClients.setText("Nombre de clients");
		grpNombreDeClients.setBounds(271, 25, 235, 82);
		
		nbClients = new Text(grpNombreDeClients, SWT.NONE);
		nbClients.setText("<dynamic>");
		nbClients.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.BOLD));
		nbClients.setEditable(false);
		nbClients.setBounds(63, 36, 76, 21);
		
		String nombreClients ="0";
		try {
			nombreClients = GestionAdmin.getNbClients();
			nbClients.setText(nombreClients);
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		canvas.addPaintListener(new PaintListener() {
			
			@Override
			public void paintControl(PaintEvent arg0) {
				// TODO Auto-generated method stub
				try {
					List<String> stat = GestionAdmin.getStat();
				
					GC gc = arg0.gc;
					StringTokenizer st ;
					gc.drawString("Nombre de commandes en fonction du temps", 1, 1);
					int nbCmd = 0;
					
					/*Pour chaque date, le nombre de clients est représenté 
					 * sous la forme d'un baton. Le nombre de clients ainsi que la date
					 * sont affichés aussi.
					 */
					if ( stat.get(0).equals("null")){
						
					}
					else{
						for(int i = 0; i< stat.size(); i++){
							st = new StringTokenizer(stat.get(i)," ");
							gc.drawString(st.nextToken(),(i+1)*40, canvas.getBounds().height-12 );
							nbCmd = Integer.valueOf(st.nextToken());
							gc.drawString(String.valueOf(nbCmd), (i+1)*40, (270-nbCmd*10));
							gc.drawRectangle((i+1)*40, canvas.getBounds().height-12, 10, -nbCmd*10);
							
						}
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
				
			}
		});
		createContents();

	
	
	}

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("Statistiques ");
		setSize(829, 493);

	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
}
